package com.hh.service;


import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.hh.common.DeleteRequest;
import com.hh.entity.domain.Notice;
import com.hh.entity.domain.User;
import com.hh.entity.dto.notice.NoticeAddRequest;
import com.hh.entity.dto.notice.NoticeQueryRequest;
import com.hh.entity.dto.notice.NoticeUpdateRequest;
import com.hh.entity.vo.NoticeVO;

import javax.servlet.http.HttpServletRequest;

/**
 * @author hanhui
 * @description 针对表【notice】的数据库操作Service
 * @createDate 2025-03-05 22:21:11
 */
public interface NoticeService extends IService<Notice> {

    /**
     * 添加公告
     *
     * @param noticeAddRequest 添加公告的请求参数
     * @param loginUser        当前登录用户信息
     * @return Notice          返回添加后的公告信息
     */
    Notice addNotice(NoticeAddRequest noticeAddRequest, User loginUser);

    /**
     * 删除公告
     *
     * @param deleteRequest 删除公告的请求参数，包含要删除的公告ID
     * @param loginUser     当前登录用户信息
     */
    void deleteNotice(DeleteRequest deleteRequest, User loginUser);

    /**
     * 更新公告
     *
     * @param noticeUpdateRequest 更新公告的请求参数，包含要更新的公告内容和ID
     * @param loginUser           当前登录用户信息
     */
    void updateNotice(NoticeUpdateRequest noticeUpdateRequest, User loginUser);

    /**
     * 获取公告信息视图对象
     *
     * @param notice  公告实体对象
     * @param request HTTP请求对象，用于获取请求相关信息
     * @return NoticeVO 公告信息的视图对象，包含展示所需数据
     */
    NoticeVO getNoticeVo(Notice notice, HttpServletRequest request);

    /**
     * 获取公告信息视图对象分页数据
     *
     * @param noticePage 公告信息的分页对象，包含分页参数和公告数据列表
     * @return Page<NoticeVO> 公告信息视图对象的分页数据
     */
    Page<NoticeVO> getNoticeVoPage(Page<Notice> noticePage);

    /**
     * 获取公告查询条件构造器
     *
     * @param noticeQueryRequest 公告查询请求参数，包含查询条件
     * @return QueryWrapper<Notice> 构建好的查询条件构造器，用于数据库查询
     */
    QueryWrapper<Notice> getQueryWrapper(NoticeQueryRequest noticeQueryRequest);
}
